package com.kanshu.basictest.ui.activity.basic.annotation;

import android.view.View;
import android.widget.AdapterView;

import com.kanshu.basictest.R;
import com.kanshu.basictest.model.menu.MenuItem;
import com.kanshu.basictest.ui.base.BaseListMenuActivity;

import java.util.ArrayList;
import java.util.List;

public class FiveBasicAnnotationActivity extends BaseListMenuActivity {


    @Override
    protected String provideBarTitle() {
        return "AndroidBasicTest";
    }

    public static final String TAG = "五个元注解";


    @Override
    protected List<? extends MenuItem> provideMenuData() {
        List<MenuItem> menuItems = new ArrayList<>();
        menuItems.add(0, new MenuItem("@Deprecated", R.color.brown_300));//@Deprecated
        menuItems.add(1, new MenuItem("@Override", R.color.brown_300));//@Override
        menuItems.add(2, new MenuItem("@SuppressWarnings", R.color.brown_300));//@SuppressWarnings
        menuItems.add(3, new MenuItem("@SafeVarargs", R.color.brown_300));//@SafeVarargs
        menuItems.add(4, new MenuItem("@FunctionalInterface", R.color.brown_300));//@FunctionalInterface

        return menuItems;
    }

    @Override
    protected void init() {
        super.init();
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        switch (position) {
            case 0://@Deprecated
                break;
            case 1://@Override
                break;
            case 2://@SuppressWarnings
                break;
            case 3://@SafeVarargs
                break;
            case 4://@FunctionalInterface
                break;

        }
    }

    /**
     * Deprecated 注解：
     * <p>
     * {@link Deprecated}
     * <p>
     * 定义：“已过时”注解
     * <p>
     * 目标: CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE
     * <p>
     * 生命周期：RUNTIME
     * <p>
     * 作用:表示目标已过时，建议不再使用。原因可能是使用目标可能存在风险，或者提供更好的替代者。
     */
    private void testDeprecated() {

    }

    /**
     * Override 注解：
     * <p>
     * {@link Override}
     * <p>
     * 定义：“重写”注解
     * <p>
     * 目标:  METHOD
     * <p>
     * 生命周期：SOURCE
     * <p>
     * 作用:告诉编译器检查这个方法，保证父类要包含一个被该方法重写的方法，否则就会编译报错。
     */
    private void testOverride() {

    }

    /**
     * SuppressWarnings 注解：
     * <p>
     * {@link SuppressWarnings}
     * <p>
     * 定义：“阻止警告”注解
     * <p>
     * 目标:  TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE
     * <p>
     * 生命周期：SOURCE
     * <p>
     * 作用:指示被该注解修饰的程序元素（以及该程序元素中的所有子元素）取消显示指定的编译器警告。
     */
    private void testSuppressWarnings() {

    }

    /**
     * SafeVarargs 注解：
     * <p>
     * {@link SafeVarargs}
     * <p>
     * 定义：“安全的可变参数”注解
     * <p>
     * 目标:  CONSTRUCTOR, METHOD
     * <p>
     * 生命周期：RUNTIME
     * <p>
     * 作用:用来修饰构造器或方法，以抑制由 可变参数 引发的“堆污染”警告。
     */
    private void testSafeVarargs() {

    }

    /**
     * FunctionalInterface 注解：
     * <p>
     * {@link FunctionalInterface}
     * <p>
     * 定义：“函数式接口”注解
     * <p>
     * 目标:  TYPE
     * <p>
     * 生命周期：RUNTIME
     * <p>
     * 作用:用来指定某个接口必须是“函数式接口”
     * <p>
     * 说明：
     * 1.函数式接口：Java8规定，如果一个接口中只有一个抽象方法（可以包含多个默认方法或者多个static方法），该接口就是函数式接口。
     * 2.@FunctionalInterface只是用来告诉编译器，检查这个接口，保证该接口只能包含一个抽象方法，否则就会编译报错。
     * 3.@FunctionalInterface只能修饰接口，不能修饰其它程序元素。
     * <p>
     * 错误：
     * 1.使用@FunctionalInterface修饰普通类或抽象类时，报错信息：意外的 @FunctionalInterface 注释 FunctionalInterfaceTest1 不是函数接口
     * 2.使用@FunctionalInterface修饰包含多个抽象方法的接口时，报错信息：意外的 @FunctionalInterface 注释 FunctionalInterfaceTest3 不是函数接口
     * 在 接口 FunctionalInterfaceTest3 中找到多个非覆盖抽象方法
     */
    private void testFunctionalInterface() {

    }

}
